package com.janko.redislock.redisLock.controller.base;

import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * @ Description   :  类文件说明
 * @ Author        :  nieyankang
 * @ Version       :  1.0
 */
@Slf4j
@Api(value = "基础Redis操作使用")
@RestController(value = "/redis")
public class BaseController {
    /**
     * redis的五大数据结构
     * String(字符串)、list(列表)、Hash(散列对象)、set(集合)、zSet(有序集合)
     * 使用场景
     * string：单个的缓存结果，不与其他的 KV 之间有联系
     * hash：一个 Object 包含有很多属性，且这些属性都需要单独存储。注意：这种情况不要使用 string，因为 string 会占据更多的内存
     * list：一个 Object 包含很多数据，且这些数据允许重复、要求有顺序性
     * set：一个 Object 包含很多数据，不要求数据有顺序，但是不允许重复
     * zset：一个 Object 包含很多数据，且这些数据自身还包含一个权重值，可以利用这个权重值来排序
     * */


    private RedisTemplate redisTemplate ;

    /**
     * 常用命令: set,get,strlen,exists,dect,incr,setex 等等
     * 应用场景 ：一般常用在需要计数的场景，比如用户的访问次数、热点文章的点赞转发数量等等
     */
    @RequestMapping(value = "/string",method = RequestMethod.GET)
    public  void MethodForString(){
        String key = "strKey";
        long execNum = redisTemplate.opsForSet().add(key, "str1Value");
        log.info("执行查询的结果是:{}", execNum > 0 ? "执行成功" : "执行失败");
        System.out.println(redisTemplate.opsForValue().get(key));
    }


}

